package api

import (
	"pids-cloud-server/app/common"
	"pids-cloud-server/app/middleware"
	"pids-cloud-server/entity"
	"pids-cloud-server/utils"

	"github.com/gin-gonic/gin"
)

// GetDockerList 获取Docker信息列表
// @Summary 获取Docker信息列表
// @Description 获取Docker信息列表，支持分页和条件筛选
// @Tags Docker信息
// @Accept json
// @Produce json
// @Param page query int false "页码，默认1"
// @Param pageSize query int false "每页大小，默认10"
// @Param ip query string false "IP地址"
// @Param name query string false "容器名称"
// @Success 200 {object} common.Result{data=common.PageResult{list=[]entity.DockerInfo}}
// @Failure 500 {object} common.Result
// @Router /docker/list [get]
func GetDockerList(c *gin.Context) {
	// 从上下文中获取分页参数
	pagination, _ := c.Get("pagination")
	paging := pagination.(*middleware.PaginationParams)

	db := utils.GetDB()
	if db == nil {
		common.ErrorResponse(c, 500, "数据库连接失败")
		return
	}
	ip := c.Query("ip")
	name := c.Query("name")

	query := db.Model(&entity.DockerInfo{})
	if ip != "" {
		query = query.Where("ip LIKE ?", "%"+ip+"%")
	}
	if name != "" {
		query = query.Where("name LIKE ?", "%"+name+"%")
	}

	// 获取总记录数
	var total int64
	if err := query.Count(&total).Error; err != nil {
		common.ErrorResponse(c, 500, "查询失败")
		return
	}

	// 获取分页数据
	var dockerList []entity.DockerInfo
	if err := query.Offset((paging.Page - 1) * paging.PageSize).Limit(paging.PageSize).Find(&dockerList).Error; err != nil {
		common.ErrorResponse(c, 500, "查询失败")
		return
	}

	common.SuccessPageResponse(c, dockerList, total, paging.Page, paging.PageSize)
}

// AddDockerInfo 新增Docker信息
// @Summary 新增Docker信息
// @Description 新增一条Docker信息
// @Tags Docker信息
// @Accept json
// @Produce json
// @Param dockerInfo body entity.DockerInfo true "Docker信息"
// @Success 200 {object} common.Result{data=entity.DockerInfo}
// @Failure 400 {object} common.Result
// @Failure 500 {object} common.Result
// @Router /docker/add [post]
func AddDockerInfo(c *gin.Context) {
	var dockerInfo entity.DockerInfo
	if err := c.ShouldBindJSON(&dockerInfo); err != nil {
		common.ErrorResponse(c, 400, "参数错误")
		return
	}

	db := utils.GetDB()
	if db == nil {
		common.ErrorResponse(c, 500, "数据库连接失败")
		return
	}
	if err := db.Create(&dockerInfo).Error; err != nil {
		common.ErrorResponse(c, 500, "新增失败")
		return
	}
	common.SuccessResponse(c, dockerInfo)
}

// UpdateDockerInfo 更新Docker信息
// @Summary 更新Docker信息
// @Description 更新Docker信息
// @Tags Docker信息
// @Accept json
// @Produce json
// @Param updateData body map[string]interface{} true "更新数据，必须包含id字段"
// @Success 200 {object} common.Result
// @Failure 400 {object} common.Result
// @Failure 500 {object} common.Result
// @Router /docker/update [put]
func UpdateDockerInfo(c *gin.Context) {
	var updateData map[string]interface{}
	if err := c.ShouldBindJSON(&updateData); err != nil {
		common.ErrorResponse(c, 400, "参数错误")
		return
	}

	id, ok := updateData["id"].(float64)
	if !ok {
		common.ErrorResponse(c, 400, "ID参数错误")
		return
	}

	db := utils.GetDB()
	if db == nil {
		common.ErrorResponse(c, 500, "数据库连接失败")
		return
	}
	if err := db.Model(&entity.DockerInfo{}).Where("id = ?", int(id)).Updates(updateData).Error; err != nil {
		common.ErrorResponse(c, 500, "更新失败")
		return
	}
	common.SuccessResponse(c, nil)
}

// DeleteDockerInfo 删除Docker信息
// @Summary 删除Docker信息
// @Description 根据ID删除Docker信息
// @Tags Docker信息
// @Accept json
// @Produce json
// @Param id path string true "Docker信息ID"
// @Success 200 {object} common.Result
// @Failure 500 {object} common.Result
// @Router /docker/delete/{id} [delete]
func DeleteDockerInfo(c *gin.Context) {
	id := c.Param("id")
	db := utils.GetDB()
	if db == nil {
		common.ErrorResponse(c, 500, "数据库连接失败")
		return
	}
	if err := db.Delete(&entity.DockerInfo{}, id).Error; err != nil {
		common.ErrorResponse(c, 500, "删除失败")
		return
	}
	common.SuccessResponse(c, nil)
}
